Fix some possible crashes if the default display is NULL
authorMatthias Clasen <mclasen@redhat.com>
Sat, 9 Apr 2011 01:20:26 +0000 (21:20 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 9 Apr 2011 01:20:26 +0000 (21:20 -0400)
Unlikely that many people will hit these, but still.
https://bugzilla.gnome.org/show_bug.cgi?id=645176

gdk/gdkdisplay.c
gdk/gdkevents.c
gdk/x11/gdkdisplaymanager-x11.c

index 1b8c7e74786455a826b92bdcbe87ceb89807d339..f2c95f7dc3c080ddde9a810365efaac2c86cf443 100644 (file)
@@ -134,7 +134,8 @@ gdk_display_class_init (GdkDisplayClass *class)
 static void
 free_pointer_info (GdkPointerWindowInfo *info)
 {
-  g_object_unref (info->toplevel_under_pointer);
+  if (info->toplevel_under_pointer)
+    g_object_unref (info->toplevel_under_pointer);
   g_slice_free (GdkPointerWindowInfo, info);
 }
 
index 25853da3afcfa80c7803bff2e4cc5f3982f30d73..29dff076d00c9951f829a33f4adf480bb0aded15 100644 (file)
@@ -605,6 +605,8 @@ gdk_event_copy (const GdkEvent *event)
 void
 gdk_event_free (GdkEvent *event)
 {
+  GdkDisplay *display;
+
   g_return_if_fail (event != NULL);
 
   if (event->any.window)
@@ -670,7 +672,9 @@ gdk_event_free (GdkEvent *event)
       break;
     }
 
-  _gdk_display_event_data_free (gdk_display_get_default (), event);
+  display = gdk_display_get_default ();
+  if (display)
+    _gdk_display_event_data_free (display, event);
 
   g_hash_table_remove (event_hash, event);
   g_slice_free (GdkEventPrivate, (GdkEventPrivate*) event);
index fbd49464de238c187186fda3517ff9983a61fe6f..c5a3728649d4ec3bb925476fd68923329e7f505e 100644 (file)
@@ -77,7 +77,8 @@ gdk_x11_display_manager_set_default_display (GdkDisplayManager *manager,
 {
   GDK_X11_DISPLAY_MANAGER (manager)->default_display = display;
 
-  _gdk_x11_display_make_default (display);
+  if (display)
+    _gdk_x11_display_make_default (display);
 }
 
 static void